package datastructure.array;

/**
 * @author XY
 * @version 1.0.0
 * @ClassName LC595.java
 * @createTime 2025年07月29日 20:01:00
 * 螺旋矩阵2
 */
public class LC59 {
    public int[][] generateMatrix(int n) {
        int startX = 0, startY = 0;
        int loop = 0;
        int count = 1;
        int x, y;
        int offset = 1;
        int[][] arr = new int[n][n];
        while (loop < n / 2) {
            //上
            for (y = startY; y < n - offset; y++) {
                //用startX做为下标是因为x还没赋值，经过一圈循环后x又会变为0 ，但是第二圈使用startX开始转了， 只有第一圈从0开始转，此时x刚好=0
                arr[startX][y] = count++;
            }
            //右
            for (x = startX; x < n - offset; x++) {
                //这里不用startX 时因为x进行了赋值，并且y在上一个for循环也进行了赋值
                arr[x][y] = count++;
            }
            //下
            for (; y > startY; y--) {
                arr[x][y] = count++;
            }
            //左
            for (; x > startX; x--) {
                arr[x][y] = count++;
            }
            startX++;
            startY++;
            loop++;
            offset++;
        }
        if (n % 2 > 0) {
            arr[startX][startY] = count;
        }

        return arr;
    }
}
